package shuaige.jdk.多线程.base.线程类方法使用示例;

import lombok.SneakyThrows;

/**
 * 每个线程执行时都具有一定的优先级，优先级高的线程获得较多的执行机会，而优先级低的线程则获得较少的执行机会。
 * 每个线程默认的优先级都与创建它的父线程的优先级相同。
 * Thread类提供了setPriority(int newPriority)、getPriority()方法来设置和返回指定线程的优先级，其中setPriority()方法的参数可以是一个整数，范围是1~10之间，也可以使用Thread类的如下三个静态常量。
 * MIN_PRIORITY = 1;
 * NORM_PRIORITY = 5;
 * MAX_PRIORITY = 10;
 */
public class 线程优先级 implements Runnable {


    public static void main(String[] args) {
        // 改变主线程的优先级
        Thread.currentThread().setPriority(9);
        for (int i = 0; i < 30; i++) {
            if (i == 10) {
                Thread low = new Thread(new 线程优先级(), "低级");
                // 设置该线程为最低优先级 1
                low.setPriority(Thread.MIN_PRIORITY);
                low.start();
                System.out.println("低级-创建之初的优先级:" + low.getPriority());
            }
            if (i == 10) {
                Thread high = new Thread(new 线程优先级(), "高级");
                // 设置该线程为最高优先级 10
                high.setPriority(Thread.MAX_PRIORITY);
                high.start();
                System.out.println("高级-创建之初的优先级:" + high.getPriority());
            }
        }
    }

    @Override
    @SneakyThrows
    public void run() {
        for (int i = 0; i < 5000; i++) {
            Thread thread = Thread.currentThread();
            String name = thread.getName();
            int priority = thread.getPriority();
            System.out.println(name + ",其优先级是：" + priority + ",循环变量的值为:" + i);
        }
    }

}